package wx.controller;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import config.Interceptor.PassToken;
import org.apache.commons.codec.digest.DigestUtils;
import org.springframework.web.bind.annotation.*;

import utils.CommonRetumType;
import utils.error.BusinessException;
import utils.error.EmBusinessError;
import wx.entity.Wxuser;
import wx.mapper.WxuserMapper;
import wx.utils.WechatUtil;

import javax.annotation.Resource;
import java.util.*;


@RestController
public class Testcontroller{

    @Resource
    private WxuserMapper wxUserMapper;



//    /**
//     * 微信用户登录详情
//     */
//    @PostMapping("wx/login")
//    @ResponseBody
//    @PassToken
//    public CommonRetumType user_login(@RequestParam(value = "code", required = false) String code,
//                                   @RequestParam(value = "rawData", required = false) String rawData,
//                                   @RequestParam(value = "signature", required = false) String signature,
//                                   @RequestParam(value = "encrypteData", required = false) String encrypteData,
//                                   @RequestParam(value = "iv", required = false) String iv) {
//        // 用户非敏感信息：rawData
//        // 签名：signature
//        JSONObject rawDataJson = JSON.parseObject(rawData);
//        // 1.接收小程序发送的code
//        // 2.开发者服务器 登录凭证校验接口 appi + appsecret + code
//        JSONObject SessionKeyOpenId = WechatUtil.getSessionKeyOrOpenId(code);
//        // 3.接收微信接口服务 获取返回的参数
//        String openid = SessionKeyOpenId.getString("openid");
//        String sessionKey = SessionKeyOpenId.getString("session_key");
//        // 4.校验签名 小程序发送的签名signature与服务器端生成的签名signature2 = sha1(rawData + sessionKey)
//        String signature2 = DigestUtils.sha1Hex(rawData + sessionKey);
////        if (!signature.equals(signature2)) {
////            return GlobalResult.build(500, "签名校验失败", null);
////        }
//        // 5.根据返回的User实体类，判断用户是否是新用户，是的话，将用户信息存到数据库；不是的话，更新最新登录时间
//        Wxuser user = wxUserMapper.selectByPrimaryKey(openid);
//        // uuid生成唯一key，用于维护微信小程序用户与服务端的会话
//        String skey = UUID.randomUUID().toString();
//
//        if (user == null) {
//            // 用户信息入库
//            String nickName = rawDataJson.getString("nickName");
//            String avatarUrl = rawDataJson.getString("avatarUrl");
//            String gender = rawDataJson.getString("gender");
//            String city = rawDataJson.getString("city");
//            String country = rawDataJson.getString("country");
//            String province = rawDataJson.getString("province");
//
//            Wxuser wxUser= new Wxuser();
//            wxUser.setOpenId(openid);
//            wxUser.setSkey(skey);
//            wxUser.setCreateTime(new Date());
//            wxUser.setLastVisitTime(new Date());
//            wxUser.setSessionKey(sessionKey);
//            wxUser.setCity(city);
//            wxUser.setProvince(province);
//            wxUser.setCountry(country);
//            wxUser.setAvatarUrl(avatarUrl);
//            wxUser.setGender((byte) Integer.parseInt(gender));
//            wxUser.setNickName(nickName);
//
//            this.wxUserMapper.insert(wxUser);
//        } else {
//            // 已存在，更新用户登录时间
//            Wxuser wxUser = new Wxuser();
//            wxUser.setLastVisitTime(new Date());
//            // 重新设置会话skey
//            wxUser.setSkey(skey);
//            this.wxUserMapper.updateByPrimaryKey(user);
//        }
//        //encrypteData比rowData多了appid和openid
//        //JSONObject userInfo = WechatUtil.getUserInfo(encrypteData, sessionKey, iv);
//        //6. 把新的skey返回给小程序
//        HashMap<String,String> hashMap = new HashMap<>();
//        hashMap.put("openid",openid);
//        hashMap.put("sessionKey",sessionKey);
//        System.out.println(code);
//        return CommonRetumType.create(skey,"skey请求成功");
//}
    @GetMapping("/test")
    @PassToken
    public CommonRetumType Test(@RequestParam("openid") String openid){

        Wxuser user = wxUserMapper.selectByPrimaryKey(openid);
        if (user ==null ){
            Wxuser wxuser = new Wxuser();
            wxuser.setOpenId(openid);

            System.out.println(openid);
            return CommonRetumType.create(wxUserMapper.insertSelective(wxuser),"skey请求成功");
        }else {
            Wxuser wxuser = new Wxuser();
            wxuser.setLastVisitTime(new Date());

            return CommonRetumType.create(wxUserMapper.updateByPrimaryKeySelective(wxuser),"update");
        }

    }
}
